package com.clps.algorithm.chapter06.小行星碰撞;

import java.util.Stack;

/**
 * 输入一个表示小行星的数组，数组中每个数字的绝对值表示小行星的大小，数字的正负号表示小行星运动的方向，正号表示向右飞行，负号表示向左飞行。如果两个小行星相撞，
 * 体积较小的小行星将会爆炸最终消失，体积较大的小行星不受影响。如果相撞的两个小行星大小相同，它们都会爆炸。
 * 飞行方向相同的小行星永远不会相撞。求最终剩下的小行星。例如，假如有六个小行星[4, 5, -6, 4, 8, -5]（如图6.2所示），它们相撞之后最终剩下三个小行星[-6, 4, 8]。
 */
public class demo01 {
    public static void main(String[] args) {

    }

    public int[] asteroidCollision(int[] asteroids){
        Stack<Integer> stack = new Stack<>();
        for (int as : asteroids) {
            while (!stack.empty() && stack.peek() >0 && stack.peek() <-as){
                stack.pop();
            }

            if(!stack.empty() && as <0 && stack.peek() <-as){
                stack.pop();
            }else if(as>0 || stack.empty() || stack.peek() <0){
                stack.push(as);
            }
        }

        return  stack.stream().mapToInt(i->i).toArray();
    }
}
